package com.dongdong.controller;

import com.alibaba.fastjson.JSONObject;
import com.dongdong.em.Result;
import com.dongdong.em.ResultEnum;
import com.dongdong.page.PageParams;
import com.dongdong.service.*;
import com.dongdong.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("goods")
@RefreshScope    //开启热更新
public class GoodsController {

    @Autowired
    private ItemCatService itemCatService;

    @Autowired
    private TypeTemplateService typeTemplateService;

    @Autowired
    private GoodsService goodsService;

    @Autowired
    private SpecOptionService optionService;


    @GetMapping("getItemcatIdByTypeId")
    public Result<ItemCatVO> getItemcatIdByTypeId(@RequestParam Long id) {
        //查询类目
        ItemCatVO itemCatById = itemCatService.getItemCatById(id);//17:52  20
        return Result.OK().setData(itemCatById);
    }

//    @GetMapping("getTypeIdByBrand")
//    public Result getTypeIdByBrand(@RequestParam Long id) {
//        TypeVO typeById = typeTemplateService.getTypeById(id);
//
//        //获取spec的list集合
//        String specVOSList = typeById.getSpecIds();
//        List<SpecVO> specVOS = JSONObject.parseArray(specVOSList, SpecVO.class);
//        //获取所有规格选项
//        List<SpecOptionVO> optionvo = optionService.getOptionList();
//        //相同id   不同规格    避免了多次循环对数据库带来的压力
//        Map<Long, List<SpecOptionVO>> optionMap = optionvo.stream().collect(Collectors.groupingBy(x -> x.getSpecId()));
//
//        //for循环
//        for (SpecVO specVO : specVOS) {
//            Long id1 = specVO.getId();
//            List<SpecOptionVO> opp = optionMap.get(id1);
//            specVO.setSpecOptionVOList(opp);
//        }
//
//        typeById.setSpecVOSList(specVOS);
//
//        return Result.OK().setData(typeById);
//    }

    //增加商品表
    @PostMapping("InsertGoodsSPU")
    public Result InsertGoodsSPU(@RequestBody GoodsSPUVO goodsSPUVO, @RequestHeader String Autherizetion) {
        int i = goodsService.InsertGoodsSPU(goodsSPUVO, Autherizetion);
        if (i <= 0) {
            return Result.ERROR();
        } else if (i == 12) {
            return Result.ZHRESPONSE(ResultEnum.TOKEN_LOSE_EFFICACY);//为空 或者异常  会导致token失效  解决方法：重新登录获取token
        }
        return Result.OK();
    }

    //分页查询
    @PostMapping("getGoodsList")
    public Result getGoodsList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
                               @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize) {
        PageParams<GoodsSPUVO> goodsSPUVOList = goodsService.getGoodsList(pageNum, pageSize);
        return Result.OK().setData(goodsSPUVOList);
    }

    //查询商品状态
    @GetMapping("getStatus")
    public Result getStatus(@RequestParam String status) {
        List<GoodsSPUVO> params = goodsService.getStatus(status);
        return Result.OK().setData(params);
    }

    //删除
    @DeleteMapping("delteGoods/{arr}")
    public Result delteGoods(@PathVariable Long[] arr) {
        int i = goodsService.delteGoods(arr);
        if (i <= 0) {
            return Result.ERROR();
        }
        return Result.OK();
    }

    //根据父id查询然后获取第一条将数据填充到前端
    @GetMapping("getParentIdShow")
    public Result getParentIdShow(@RequestParam Long parentId) {
//        Result<ItemCatVO> patentIdShow = itemCatAPI.getPatentIdShow(parentId);
        ItemCatVO patentIdShow = itemCatService.getPatentIdShow(parentId);
//        ItemCatVO data = patentIdShow.getData();
        return Result.OK().setData(patentIdShow);
    }

//
//    //根据商品名称模糊查询
//    @PostMapping("FindGoodsName")
//    public Result FindGoodsName(@RequestBody GoodsSPUVO goodsSPUVO){
//        GoodsSPUVO vo = goodsService.FindGoodsName(goodsSPUVO);
//        return Result.OK().setData(vo);
//    }


    //商品管理审核
    @PutMapping("updateGoods/{arr}")
    public Result UpdateAuditStatus(@PathVariable Long[] arr) {
        int i = goodsService.UpdateAuditStatus(arr);
        if (i <= 0) {
            return Result.ERROR();
        }
        return Result.OK();
    }



    //商品详情表--------------------------------------------------
    @GetMapping("getGoodsVO")
    public Result getGoodsVO(@RequestParam Long id){
        GoodsSPUVO goodsvo = goodsService.getGoodsVO(id);
        return Result.OK().setData(goodsvo);
    }
}
